import webbrowser

from src.constance import ai_write_file
from src.module.TongyiModel import TongyiModel

from langchain.tools import tool
from langgraph.prebuilt import create_react_agent


class Tools:
    @staticmethod
    @tool
    def search_weather(address: str) -> str:
        """ 查询某个地方的天气情况

        Args:
            address: 地址
        """
        return address + '天气晴朗'

    @staticmethod
    @tool
    def write_local_code(content: str, filename: str) -> str:
        """ 创建一个本地文件并写入内容

        Args:
            content: 文件的内容
            filename: 文件的名称
        """
        try:
            with open(str(ai_write_file(filename)), 'w+', encoding='utf8') as file:
                file.write(content)

            return '写入成功'
        except BaseException as e:
            return '写入失败：' + repr(e)

    @staticmethod
    @tool
    def open_file(filename: str) -> str:
        """ 打开并预览一个本地的文件

        Args:
            filename: 文件的名称
        """
        webbrowser.open(f'{str(ai_write_file(filename))}')

        return '打开成功'


class AutoCode(TongyiModel):
    def start(self):
        tools = [Tools().search_weather, Tools().write_local_code, Tools().open_file]
        agent = create_react_agent(self.model, tools, debug=True)
        response = agent.invoke({"messages": [
            ('system', f"""
                你现在是一名前端开发工程师AI小助手，你需要利用你现有的工具，来完成用户提出的需求，并进行交付。
                最终的交付应该是将你的代码写入到本地的文件中去，文件只能是html，名称你可以随意定义, 并将其打开供用户预览。
                你可以使⽤以下⼯具来完成任务: {"，".join([item.name for item in tools])} \n。
            """),
            ('human',  """给我写一个酷炫的3D轮播图效果, 采用下面的这些图片：
            http://gips0.baidu.com/it/u=1690853528,2506870245&fm=3028&app=3028&f=JPEG&fmt=auto?w=1024&h=1024、 
            http://pic1.arkoo.com/56D0B40F99F841DF8A2425762AE2565D/picture/o_1i4qoovi8rn8ras12sn63lgpo1im.jpg、
            https://pic.rmb.bdstatic.com/bjh/news/6792ab1e35c6a2a6cd10a5990bd033d0.png、
            https://pic4.zhimg.com/v2-4d9e9f936b9968f53be22b594aafa74f_r.jpg、
            https://oss.cloudhubei.com.cn/cms/release/set35/20241014/9ec7a083198223c49c06e3ebbf8df33c.jpg""")
        ]})
        print(response)